package cn.chengpengper.nacos.client.convert;

import org.apache.commons.lang3.StringUtils;

import java.util.HashSet;
import java.util.Set;

public class BooleanConverter extends AbstractPropertyConverter<Boolean> {

    private static final Set<String> TRUE_VALUES = new HashSet<>(8);

    private static final Set<String> FALSE_VALUES = new HashSet<>(8);

    static {
        TRUE_VALUES.add("true");
        TRUE_VALUES.add("on");
        TRUE_VALUES.add("yes");
        TRUE_VALUES.add("1");

        FALSE_VALUES.add("false");
        FALSE_VALUES.add("off");
        FALSE_VALUES.add("no");
        FALSE_VALUES.add("0");
    }

    @Override
    Boolean convert(String property) {
        if (StringUtils.isEmpty(property)) {
            return null;
        }

        property = property.toLowerCase();
        if (TRUE_VALUES.contains(property)) {
            return Boolean.TRUE;
        } else if (FALSE_VALUES.contains(property)) {
            return Boolean.FALSE;
        }
        throw new IllegalArgumentException("Invalid boolean value '" + property + "'");
    }
}

